package com.ganbo.ms.pool.pool;

import com.ganbo.ms.pool.pojo.SnapshotExtend;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;

import java.util.concurrent.atomic.AtomicInteger;

public class SnapshotExtendFactory extends BasePooledObjectFactory<SnapshotExtend> {


    private AtomicInteger nextId = new AtomicInteger(0);
    private Integer initRefCount;

    public SnapshotExtendFactory(Integer initRefCount) {
        this.initRefCount = initRefCount;
    }

    @Override
    public SnapshotExtend create() throws Exception {
        int id = nextId.getAndIncrement();
        SnapshotExtend set = new SnapshotExtend("test-" + id, id, initRefCount);
        return set;
    }

    /**
     * common-pool2 中创建了 DefaultPooledObject 对象对对象池中对象进行的包装。
     * 将我们自定义的对象放置到这个包装中，工具会统计对象的状态、创建时间、更新时间、返回时间、出借时间、使用时间等等信息进行统计
     */
    @Override
    public PooledObject<SnapshotExtend> wrap(SnapshotExtend snapshotExtend) {
        return new DefaultPooledObject<>(snapshotExtend);
    }

    /**
     * 销毁对象
     */
    @Override
    public void destroyObject(PooledObject<SnapshotExtend> p) throws Exception {
        p.getObject().destroy();
    }

//    /**
//     * 验证对象是否可用
//     */
//    @Override
//    public boolean validateObject(PooledObject<SnapshotExtend> p) {
//        return super.validateObject(p);
//    }
//
//    /**
//     * 激活一个对象，使其可用用
//     */
//    @Override
//    public void activateObject(PooledObject<SnapshotExtend> p) throws Exception {
//        super.activateObject(p);
//    }
//
//    /**
//     * 钝化一个对象,也可以理解为反初始化
//     */
//    @Override
//    public void passivateObject(PooledObject<SnapshotExtend> p) throws Exception {
//        super.passivateObject(p);
//    }
}

